package web

import (
	"encoding/json"

	"gitee.com/xgotool/sqlite-logs-more/model"
	"gitee.com/xgotool/sqlite-logs-more/service/logs"
	"gitee.com/xiaoyutab/xgotool/xgin"
	"gitee.com/xiaoyutab/xgotool/xstring"
	"github.com/gin-gonic/gin"
)

// WEB端记录Quest日志
//
//	POST	log.quest.create
func LogQuestCreate(c *gin.Context) *xgin.Response {
	type temp_struct struct {
		Id       json.Number `json:"id" form:"id" xml:"id"`                      // 日志ID，unix-纳秒时间戳 time.Now().UnixNano()
		Did      json.Number `json:"did" form:"did" xml:"did"`                   // 设备ID
		Args     string      `json:"args" form:"args" xml:"args"`                // 程序名称
		Uri      string      `json:"uri" form:"uri" xml:"uri"`                   // 请求网址
		Param    string      `json:"param" form:"param" xml:"param"`             // 请求参数
		HttpCode json.Number `json:"http_code" form:"http_code" xml:"http_code"` // HTTP返回值Code
		Body     string      `json:"body" form:"body" xml:"body"`                // HTTP返回值信息
		Error    string      `json:"error" form:"error" xml:"error"`             // 请求报错信息
		Header   string      `json:"header" form:"header" xml:"header"`          // 请求Header请求头
		QuestSec json.Number `json:"quest_sec" form:"quest_sec" xml:"quest_sec"` // 请求耗时，纳秒
		ClientIp string      `json:"client_ip" form:"client_ip" xml:"client_ip"` // 客户端IP
		Uid      json.Number `json:"uid" form:"uid" xml:"uid"`                   // 用户ID
		Uuid     string      `json:"uuid" form:"uuid" xml:"uuid"`                // 本次请求的UUID标识
		Ruid     string      `json:"ruid" form:"ruid" xml:"ruid"`                // 本次请求的RUID标识
	}
	temp := temp_struct{}
	if err := xgin.Bind(c, &temp); err != nil {
		return xgin.Resp().Error(err)
	}
	// 正式变量赋值
	// 请使用param进行参数验证、变量效验等操作
	param := model.QuestLog{}
	param.Id = xstring.JInt64(temp.Id)
	param.Did = xstring.JInt64(temp.Did)
	param.Uri = temp.Uri
	param.Param = temp.Param
	param.HttpCode = xstring.JInt64(temp.HttpCode)
	param.Body = temp.Body
	param.Error = temp.Error
	param.Header = temp.Header
	param.Args = temp.Args
	param.QuestSec = xstring.JInt64(temp.QuestSec)
	param.ClientIp = temp.ClientIp
	param.Uid = xstring.JInt64(temp.Uid)
	param.Uuid = temp.Uuid
	param.Ruid = temp.Ruid
	if err := logs.QuestLogCreate(&param); err != nil {
		return xgin.Resp().Error(err)
	}
	return xgin.Resp().SuccessEmpty()
}
